package plg.grupo1.Lexico.consoleApp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

import plg.grupo1.Lexico.StateMachineHierarchy.Contexto;
import plg.grupo1.Lexico.StateMachineHierarchy.State0;
import plg.grupo1.Lexico.TokenHierarchy.Token;
import plg.grupo1.Lexico.TokenHierarchy.TokenError;


public class TokenReaderConsola {

	static String Archivo;
	static File fichero;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		checkParams(args);
		
		File archivo = new File(args[0]);
		
		try {
			System.out.println("Procesando: " + args[0]);
			long tIn= System.nanoTime();
			//analizador lexico
			AnalizadorLexico(new BufferedReader(new FileReader(archivo)));
			
			long tOut = System.nanoTime();
			System.out.println("Procesado en "+(tOut-tIn)+" ns");
		} catch (FileNotFoundException e) {
			System.err.println("Fichero Incorrecto, El fichero es "+ archivo.getPath());
		}
	}

	private static void checkParams(String[] args) {
		if (args.length != 1) {
			System.err.println("Numero de parametros incorrecto \n La forma correcta es java -jar nombre_rtf");
			System.exit(-1);
		}
	}

	private static void AnalizadorLexico(BufferedReader inBuffer) {
		
		String linea;		
		Contexto.getInstance();
		
		try { while ((linea = inBuffer.readLine()) != null) Contexto.appendToBuffer(linea+'\n'); } 
		catch (IOException e) {	System.err.println("Error de lectura");	}
		
		try { 
			Contexto.setCurrentState(State0.getInstance());
			Contexto.goNext();			
		} 
		catch (Exception e) {System.err.println(e);}
		
		Vector<TokenError> Te = Contexto.getError();
		Vector<Token> TN = Contexto.getTokens();
		for (TokenError te : Te)
			System.err.println(te);
		for (Token tn : TN)
			System.out.println(tn);

	}
}